package com.hexingmo.dawn.lang;

/**
 * 操作系统类型枚举
 * 
 * 操作系统（Operating System，OS）是管理计算机硬件与软件资源的系统软件，
 * 是计算机系统的核心与基石。不同的操作系统有不同的特点、用途和市场份额。
 * 
 * 操作系统分类说明：
 * - 桌面操作系统：Windows、macOS、Linux桌面版
 * - 服务器操作系统：Linux服务器版、Windows Server、Unix
 * - 移动操作系统：Android、iOS
 * - 嵌入式操作系统：各种定制Linux、实时操作系统
 * 
 * 使用场景：
 * - 系统兼容性检测
 * - 平台特定功能实现
 * - 用户界面适配
 * - 系统资源管理
 * - 安全策略配置
 * 
 * 使用示例：
 * // 检测当前操作系统
 * OsType currentOS = OsType.getCurrentOS();
 * switch (currentOS) {
 *     case WINDOWS:
 *         // Windows特定代码
 *         break;
 *     case LINUX:
 *         // Linux特定代码
 *         break;
 *     case MACOS:
 *         // macOS特定代码
 *         break;
 * }
 * 
 * // 检查是否为移动平台
 * if (currentOS == OsType.ANDROID || currentOS == OsType.IOS) {
 *     // 移动平台特定代码
 * }
 * 
 * 相关文档：
 * - Windows: https://docs.microsoft.com/en-us/windows/
 * - Linux: https://www.kernel.org/doc/
 * - macOS: https://developer.apple.com/documentation/
 * - Android: https://developer.android.com/docs
 * - iOS: https://developer.apple.com/ios/
 *
 * @author He Xing Mo
 * @since 1.0
 */
public enum OsType {

    // Windows 系列
    /**
     * Windows 操作系统（通用）
     * 
     * Windows是由微软公司开发的操作系统系列，是全球最流行的桌面操作系统。
     * 特点：图形化界面、丰富的软件生态、易用性强。
     * 
     * 主要版本：
     * - Windows 11 (2021年发布)
     * - Windows 10 (2015年发布)
     * - Windows 8/8.1 (2012年发布)
     * - Windows 7 (2009年发布，已停止支持)
     * 
     * 使用场景：
     * - 个人电脑和办公环境
     * - 游戏和娱乐
     * - 企业桌面管理
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows/
     */
    WINDOWS("Windows"),
    
    /**
     * Windows 11
     * 
     * Windows 11是微软最新的桌面操作系统，于2021年10月发布。
     * 特点：现代化的界面设计、更好的性能、增强的安全性。
     * 
     * 系统要求：
     * - 64位处理器，1GHz或更快
     * - 4GB RAM
     * - 64GB存储空间
     * - 支持DirectX 12的显卡
     * - TPM 2.0
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows/windows-11/
     */
    WINDOWS_11("Windows 11"),
    
    /**
     * Windows 10
     * 
     * Windows 10是微软的主力桌面操作系统，于2015年发布。
     * 特点：统一的应用商店、Cortana语音助手、多设备同步。
     * 
     * 支持周期：2025年10月14日结束支持
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows/windows-10/
     */
    WINDOWS_10("Windows 10"),
    
    /**
     * Windows 8/8.1
     * 
     * Windows 8是微软尝试统一桌面和移动体验的操作系统。
     * 特点：Metro界面、触摸优化、快速启动。
     * 
     * 支持状态：已停止支持
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows/win32/
     */
    WINDOWS_8("Windows 8"),
    
    /**
     * Windows 7
     * 
     * Windows 7是微软最成功的操作系统之一，以稳定性和兼容性著称。
     * 特点：Aero界面、任务栏改进、性能优化。
     * 
     * 支持状态：2020年1月14日已停止支持
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows/win32/
     */
    WINDOWS_7("Windows 7"),
    
    /**
     * Windows Vista
     * 
     * Windows Vista是Windows XP的继任者，引入了许多新特性。
     * 特点：Aero界面、UAC安全机制、搜索功能。
     * 
     * 支持状态：已停止支持
     */
    WINDOWS_VISTA("Windows Vista"),
    
    /**
     * Windows XP
     * 
     * Windows XP是微软历史上最成功的操作系统之一。
     * 特点：稳定性好、兼容性强、使用简单。
     * 
     * 支持状态：2014年4月8日已停止支持
     */
    WINDOWS_XP("Windows XP"),
    
    /**
     * Windows Server
     * 
     * Windows Server是微软的企业级服务器操作系统。
     * 特点：高可靠性、企业级功能、Active Directory。
     * 
     * 主要版本：Server 2022, 2019, 2016, 2012
     * 
     * 官方文档：https://docs.microsoft.com/en-us/windows-server/
     */
    WINDOWS_SERVER("Windows Server"),

    // Linux 系列
    /**
     * Linux 操作系统（通用）
     * 
     * Linux是一个开源的类Unix操作系统内核，由Linus Torvalds于1991年创建。
     * 特点：开源、稳定、安全、可定制性强。
     * 
     * 应用领域：
     * - 服务器和云计算
     * - 嵌入式设备
     * - 超级计算机
     * - 桌面系统
     * 
     * 官方文档：https://www.kernel.org/doc/
     */
    LINUX("Linux"),
    
    /**
     * Ubuntu
     * 
     * Ubuntu是基于Debian的Linux发行版，由Canonical公司开发。
     * 特点：用户友好、定期更新、丰富的软件包。
     * 
     * 版本周期：每6个月发布一个版本，LTS版本支持5年
     * 
     * 官方文档：https://ubuntu.com/tutorials
     */
    UBUNTU("Ubuntu"),
    
    /**
     * CentOS
     * 
     * CentOS是基于Red Hat Enterprise Linux的开源版本。
     * 特点：企业级稳定性、长期支持、免费使用。
     * 
     * 注意：CentOS 8已于2021年停止支持，建议迁移到CentOS Stream
     * 
     * 官方文档：https://docs.centos.org/
     */
    CENTOS("CentOS"),
    
    /**
     * Red Hat Enterprise Linux (RHEL)
     * 
     * RHEL是Red Hat公司的企业级Linux发行版。
     * 特点：企业级支持、高安全性、长期稳定性。
     * 
     * 商业模式：付费订阅，提供技术支持
     * 
     * 官方文档：https://access.redhat.com/documentation/
     */
    RED_HAT("Red Hat"),
    
    /**
     * Debian
     * 
     * Debian是一个完全由自由软件组成的Linux发行版。
     * 特点：稳定性极高、软件包丰富、社区驱动。
     * 
     * 发布周期：约2年发布一个稳定版本
     * 
     * 官方文档：https://www.debian.org/doc/
     */
    DEBIAN("Debian"),
    
    /**
     * Fedora
     * 
     * Fedora是由Red Hat赞助的社区驱动的Linux发行版。
     * 特点：技术前沿、创新特性、快速更新。
     * 
     * 发布周期：每6个月发布一个版本
     * 
     * 官方文档：https://docs.fedoraproject.org/
     */
    FEDORA("Fedora"),
    
    /**
     * SUSE Linux
     * 
     * SUSE是欧洲最流行的Linux发行版之一。
     * 特点：企业级功能、YaST配置工具、欧洲市场主导。
     * 
     * 产品线：openSUSE（社区版）、SUSE Linux Enterprise（企业版）
     * 
     * 官方文档：https://doc.opensuse.org/
     */
    SUSE("SUSE"),
    
    /**
     * Alpine Linux
     * 
     * Alpine Linux是一个轻量级的Linux发行版。
     * 特点：体积小（约5MB）、安全性高、适合容器化。
     * 
     * 应用场景：Docker容器、嵌入式系统、安全环境
     * 
     * 官方文档：https://docs.alpinelinux.org/
     */
    ALPINE("Alpine Linux"),
    
    /**
     * Amazon Linux
     * 
     * Amazon Linux是亚马逊为AWS云服务优化的Linux发行版。
     * 特点：云优化、AWS集成、安全补丁及时。
     * 
     * 版本：Amazon Linux 2、Amazon Linux 2023
     * 
     * 官方文档：https://docs.aws.amazon.com/amazon-linux-2/
     */
    AMAZON_LINUX("Amazon Linux"),

    // macOS 系列
    /**
     * macOS 操作系统（通用）
     * 
     * macOS是苹果公司为Mac计算机开发的操作系统。
     * 特点：优雅的界面设计、优秀的用户体验、与iOS生态集成。
     * 
     * 架构：基于Unix，使用Darwin内核
     * 
     * 官方文档：https://developer.apple.com/documentation/
     */
    MACOS("macOS"),
    
    /**
     * macOS Ventura (13.x)
     * 
     * macOS Ventura是2022年发布的最新版本。
     * 特点：Stage Manager、Continuity Camera、系统设置重新设计。
     * 
     * 系统要求：2017年及以后的Mac设备
     * 
     * 官方文档：https://developer.apple.com/macos/
     */
    MACOS_VENTURA("macOS Ventura"),
    
    /**
     * macOS Monterey (12.x)
     * 
     * macOS Monterey是2021年发布的版本。
     * 特点：Universal Control、Focus模式、Live Text。
     * 
     * 官方文档：https://developer.apple.com/macos/
     */
    MACOS_MONTEREY("macOS Monterey"),
    
    /**
     * macOS Big Sur (11.x)
     * 
     * macOS Big Sur是2020年发布的版本。
     * 特点：全新设计语言、控制中心、Safari改进。
     * 
     * 官方文档：https://developer.apple.com/macos/
     */
    MACOS_BIG_SUR("macOS Big Sur"),
    
    /**
     * macOS Catalina (10.15)
     * 
     * macOS Catalina是2019年发布的版本。
     * 特点：Sidecar、Screen Time、移除32位应用支持。
     * 
     * 官方文档：https://developer.apple.com/macos/
     */
    MACOS_CATALINA("macOS Catalina"),

    // Unix 系列
    /**
     * Unix 操作系统（通用）
     * 
     * Unix是一个多用户、多任务的操作系统家族。
     * 特点：稳定性高、安全性好、可移植性强。
     * 
     * 历史：1969年由AT&T贝尔实验室开发
     * 
     * 官方文档：https://www.opengroup.org/standards/unix
     */
    UNIX("Unix"),
    
    /**
     * AIX (Advanced Interactive eXecutive)
     * 
     * AIX是IBM开发的Unix操作系统。
     * 特点：企业级可靠性、Power架构优化、高可用性。
     * 
     * 应用领域：企业服务器、大型机
     * 
     * 官方文档：https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/
     */
    AIX("AIX"),
    
    /**
     * HP-UX (Hewlett-Packard Unix)
     * 
     * HP-UX是惠普开发的Unix操作系统。
     * 特点：Itanium架构支持、企业级功能、高可靠性。
     * 
     * 应用领域：企业服务器、关键业务系统
     * 
     * 官方文档：https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-hpux11i-v3
     */
    HP_UX("HP-UX"),
    
    /**
     * Solaris
     * 
     * Solaris是Sun Microsystems开发的Unix操作系统。
     * 特点：ZFS文件系统、DTrace、容器技术。
     * 
     * 现状：Oracle收购Sun后继续开发
     * 
     * 官方文档：https://docs.oracle.com/cd/E26502_01/
     */
    SOLARIS("Solaris"),

    // 移动操作系统
    /**
     * Android
     * 
     * Android是谷歌开发的移动操作系统，基于Linux内核。
     * 特点：开源、市场份额最大、应用生态丰富。
     * 
     * 版本：Android 14 (API 34) 是最新版本
     * 
     * 官方文档：https://developer.android.com/docs
     */
    ANDROID("Android"),
    
    /**
     * iOS
     * 
     * iOS是苹果公司为iPhone、iPad开发的移动操作系统。
     * 特点：封闭生态、安全性高、用户体验优秀。
     * 
     * 版本：iOS 17 是最新版本
     * 
     * 官方文档：https://developer.apple.com/ios/
     */
    IOS("iOS"),

    // BSD 系列
    /**
     * FreeBSD
     * 
     * FreeBSD是一个类Unix的开源操作系统。
     * 特点：高性能、稳定性好、网络功能强大。
     * 
     * 应用领域：服务器、网络设备、嵌入式系统
     * 
     * 官方文档：https://docs.freebsd.org/
     */
    FREEBSD("FreeBSD"),
    
    /**
     * NetBSD
     * 
     * NetBSD是一个可移植性极强的类Unix操作系统。
     * 特点：跨平台支持、代码质量高、嵌入式友好。
     * 
     * 支持平台：x86、ARM、MIPS、PowerPC等
     * 
     * 官方文档：https://netbsd.org/docs/
     */
    NETBSD("NetBSD"),
    
    /**
     * OpenBSD
     * 
     * OpenBSD是一个注重安全性的类Unix操作系统。
     * 特点：安全性优先、代码审计严格、默认安全配置。
     * 
     * 应用领域：防火墙、安全服务器、关键基础设施
     * 
     * 官方文档：https://www.openbsd.org/faq/
     */
    OPENBSD("OpenBSD"),

    // 未知
    /**
     * 未知操作系统
     * 
     * 当无法识别当前操作系统类型时使用此枚举值。
     * 可能的原因：
     * - 新的操作系统版本
     * - 自定义操作系统
     * - 检测失败
     */
    UNKNOWN("Unknown");

    private final String displayName;

    /**
     * 构造函数
     * 
     * @param displayName 操作系统的显示名称
     */
    OsType(String displayName) {
        this.displayName = displayName;
    }

    /**
     * 获取操作系统的显示名称
     * 
     * @return 操作系统的显示名称
     */
    public String getDisplayName() {
        return displayName;
    }

    /**
     * 获取当前运行的操作系统类型
     * 
     * 检测原理：
     * - 通过System.getProperty("os.name")获取操作系统名称
     * - 根据名称匹配相应的操作系统类型
     * - 支持Windows、Linux、macOS等主流操作系统
     * 
     * 使用示例：
     * OsType currentOS = OsType.getCurrentOS();
     * System.out.println("当前操作系统: " + currentOS.getDisplayName());
     * 
     * @return 当前操作系统的类型
     */
    public static OsType getCurrentOS() {
        String osName = SystemUtils.getOsProperty().getName().toLowerCase();
        if (osName.contains("windows")) {
            if (osName.contains("11")) return WINDOWS_11;
            if (osName.contains("10")) return WINDOWS_10;
            if (osName.contains("8")) return WINDOWS_8;
            if (osName.contains("7")) return WINDOWS_7;
            if (osName.contains("vista")) return WINDOWS_VISTA;
            if (osName.contains("xp")) return WINDOWS_XP;
            if (osName.contains("server")) return WINDOWS_SERVER;
            return WINDOWS;
        } else if (osName.contains("linux")) {
            // 可以进一步检测具体的Linux发行版
            return LINUX;
        } else if (osName.contains("mac")) {
            // 可以进一步检测具体的macOS版本
            return MACOS;
        } else if (osName.contains("android")) {
            return ANDROID;
        } else if (osName.contains("ios")) {
            return IOS;
        } else if (osName.contains("freebsd")) {
            return FREEBSD;
        } else if (osName.contains("netbsd")) {
            return NETBSD;
        } else if (osName.contains("openbsd")) {
            return OPENBSD;
        } else if (osName.contains("aix")) {
            return AIX;
        } else if (osName.contains("hp-ux")) {
            return HP_UX;
        } else if (osName.contains("solaris")) {
            return SOLARIS;
        }
        
        return UNKNOWN;
    }

    /**
     * 检查是否为Windows操作系统
     * 
     * @return true表示是Windows系统，false表示不是
     */
    public boolean isWindows() {
        return this == WINDOWS || this == WINDOWS_11 || this == WINDOWS_10 || 
               this == WINDOWS_8 || this == WINDOWS_7 || this == WINDOWS_VISTA || 
               this == WINDOWS_XP || this == WINDOWS_SERVER;
    }

    /**
     * 检查是否为Linux操作系统
     * 
     * @return true表示是Linux系统，false表示不是
     */
    public boolean isLinux() {
        return this == LINUX || this == UBUNTU || this == CENTOS || this == RED_HAT || 
               this == DEBIAN || this == FEDORA || this == SUSE || this == ALPINE || 
               this == AMAZON_LINUX;
    }

    /**
     * 检查是否为macOS操作系统
     * 
     * @return true表示是macOS系统，false表示不是
     */
    public boolean isMacOS() {
        return this == MACOS || this == MACOS_VENTURA || this == MACOS_MONTEREY || 
               this == MACOS_BIG_SUR || this == MACOS_CATALINA;
    }

    /**
     * 检查是否为移动操作系统
     * 
     * @return true表示是移动操作系统，false表示不是
     */
    public boolean isMobile() {
        return this == ANDROID || this == IOS;
    }

    /**
     * 检查是否为Unix类操作系统
     * 
     * @return true表示是Unix类系统，false表示不是
     */
    public boolean isUnix() {
        return this == UNIX || this == AIX || this == HP_UX || this == SOLARIS || 
               this == FREEBSD || this == NETBSD || this == OPENBSD;
    }

    /**
     * 获取文件分隔符
     *
     * 文件分隔符用于分隔目录和文件名，不同操作系统使用不同的分隔符：
     * - Windows: 反斜杠 "\"
     * - Unix/Linux/macOS: 正斜杠 "/"
     *
     * 使用示例：
     * OsType currentOS = OsType.getCurrentOS();
     * String fileSeparator = currentOS.getFileSeparator();
     * String path = "home" + fileSeparator + "user" + fileSeparator + "file.txt";
     *
     * @return 当前操作系统使用的文件分隔符
     */
    public String getFileSeparator() {
        if (isWindows()) {
            return "\\";
        } else {
            return "/";
        }
    }

    /**
     * 获取路径分隔符
     *
     * 路径分隔符用于分隔多个路径，通常用于环境变量PATH等场景：
     * - Windows: 分号 ";"
     * - Unix/Linux/macOS: 冒号 ":"
     *
     * 使用示例：
     * OsType currentOS = OsType.getCurrentOS();
     * String pathSeparator = currentOS.getPathSeparator();
     * String classPath = "/usr/lib" + pathSeparator + "/opt/lib" + pathSeparator + "./lib";
     *
     * @return 当前操作系统使用的路径分隔符
     */
    public String getPathSeparator() {
        if (isWindows()) {
            return ";";
        } else {
            return ":";
        }
    }

    /**
     * 获取行分隔符
     *
     * 行分隔符用于分隔文本行，不同操作系统使用不同的行结束符：
     * - Windows: 回车换行 "\r\n"
     * - Unix/Linux/macOS: 换行符 "\n"
     * - 经典Mac OS (已废弃): 回车符 "\r"
     *
     * 使用示例：
     * OsType currentOS = OsType.getCurrentOS();
     * String lineSeparator = currentOS.getLineSeparator();
     * String text = "第一行" + lineSeparator + "第二行" + lineSeparator + "第三行";
     *
     * @return 当前操作系统使用的行分隔符
     */
    public String getLineSeparator() {
        if (isWindows()) {
            return "\r\n";
        } else if (isMacOS()) {
            // 现代macOS使用Unix风格的行分隔符
            return "\n";
        } else {
            // Linux、Unix、BSD等使用Unix风格
            return "\n";
        }
    }

    /**
     * 获取系统默认的文件分隔符
     *
     * 这是一个便捷方法，直接返回当前系统的文件分隔符。
     * 等同于：OsType.getCurrentOS().getFileSeparator()
     *
     * @return 系统默认的文件分隔符
     */
    public static String getSystemFileSeparator() {
        return getCurrentOS().getFileSeparator();
    }

    /**
     * 获取系统默认的路径分隔符
     *
     * 这是一个便捷方法，直接返回当前系统的路径分隔符。
     * 等同于：OsType.getCurrentOS().getPathSeparator()
     *
     * @return 系统默认的路径分隔符
     */
    public static String getSystemPathSeparator() {
        return getCurrentOS().getPathSeparator();
    }

    /**
     * 获取系统默认的行分隔符
     *
     * 这是一个便捷方法，直接返回当前系统的行分隔符。
     * 等同于：OsType.getCurrentOS().getLineSeparator()
     *
     * @return 系统默认的行分隔符
     */
    public static String getSystemLineSeparator() {
        return getCurrentOS().getLineSeparator();
    }

    @Override
    public String toString() {
        return displayName;
    }
}